获取公交数据 最后更新时间: 2021年01月22日
注意:下面介绍的功能使用的是地图SDK的搜索功能,需要在工程中导入搜索功能库(AMapSearchKit.framework)。
公交站点查询
公交站点查询介绍
通过公交站点的名称,可查询所有途径该公交站点的公交线路,提供多种公交线路选择。
使用公交站点查询
第 1 步,引入头文件
引入 AMapFoundationKit.h 和 AMapSearchKit.h 这两个头文件。
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>//在桥接文件中引入头文件
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>第 2 步,配置Key
在使用搜索功能时,需要添加 Key。
如果您使用的是搜索库(AMapSearchKit.framework) v4.x 版本需要引入基础 SDK AMapFoundationKit.framework ,设置 Key 的方法如下:
iOS 搜索功能 v4.x 版本设置 Key:
[AMapServices sharedServices].apiKey =@"您的key";
AMapServices.shared().apiKey = "您的Key"如果您使用的是搜索功能 v3.x 或之前版本,请您尽快更新。
iOS 搜索功能 v3.x 版本设置 Key:
[AMapSearchServices sharedServices].apiKey =@"您的key";
AMapSearchServices.shared().apiKey = "您的Key"第 3 步,定义 AMapSearchAPI
定义主搜索对象 AMapSearchAPI ,并继承搜索协议<AMapSearchDelegate>。
第 4 步,构造 AMapSearchAPI
构造主搜索对象 AMapSearchAPI,并设置代理。
self.search = [[AMapSearchAPI alloc] init];
self.search.delegate = self;
search = AMapSearchAPI()
search.delegate = self第 5 步,设置公交站查询参数
查询公交站时,请求参数类为 AMapBusStopSearchRequest,keywords为必设参数。
AMapBusStopSearchRequest *stop = [[AMapBusStopSearchRequest alloc] init];
stop.keywords = key;
stop.city     = @"beijing";
let request = AMapBusStopSearchRequest()
request.keywords = keyword
request.city = "北京"
第 6 步,发起公交站点查询
调用 AMapSearchAPI 的 AMapBusStopSearch 方法发起公交站点查询。
[self.search AMapBusStopSearch:stop];
search.aMapBusStopSearch(request)第 7 步,在回调中处理数据
当查询成功时,回进入 onBusStopSearchDone 回调函数,通过解析 AMapBusStopSearchResponse 对象获取公交站以及途径该站点的全部公交线路信息。
说明:
1)可以在回调中解析 response,获取公交站点信息。
2)通过 response.busstops 可以获取到 AMapBusStop 列表,公交站点详细信息可参考 AMapBusStop 类。
3)通过 AMapBusStop.buslines 可获取途径该站点的所有公交线路。
/* 公交站点回调*/
- (void)onBusStopSearchDone:(AMapBusStopSearchRequest *)request response:(AMapBusStopSearchResponse *)response
{
    if (response.busstops.count == 0)
    {
        return;
    }
    
    //解析response获取公交站点信息,具体解析见 Demo
}
func onBusStopSearchDone(_ request: AMapBusStopSearchRequest!, response: AMapBusStopSearchResponse!) {
    
    if response.count == 0 {
        return
    }
    
    //解析response获取公交站点信息,具体解析见 Demo
}
公交路线查询
公交线路查询介绍
通过公交线路查询,可获取查询关键字相关的全部公交线路的信息以及该线路途径的所有公交站点信息。
我们为您提供根据线路关键字和线路ID两种方式进行公交线路查询。其中:
- 根据关键字查询时,请求参数类为 AMapBusLineNameSearchRequest,keywords为必设参数。
- 根据线路ID查询时,请求参数类为 AMapBusLineIDSearchRequest,uid为必设。
使用公交线路查询
下面以线路关键字查询为例,介绍如何进行公交线路查询。
第 1 步,引入头文件
引入 AMapFoundationKit.h 和 AMapSearchKit.h 这两个头文件。
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>//在桥接文件中引入头文件
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>第 2 步,配置Key
在使用搜索功能时,需要添加 Key。
如果您使用的是搜索库(AMapSearchKit.framework) v4.x 版本需要引入基础 SDK AMapFoundationKit.framework ,设置 Key 的方法如下:
iOS 搜索功能 v4.x 版本设置 Key:
[AMapServices sharedServices].apiKey = @"您的key";
AMapServices.shared().apiKey = "您的Key"如果您使用的是搜索功能 v3.x 或之前版本,请您尽快更新。
iOS 搜索功能 v3.x 版本设置 Key:
[AMapSearchServices sharedServices].apiKey = @"您的key";
AMapSearchServices.shared().apiKey = "您的Key"第 3 步,定义 AMapSearchAPI
定义主搜索对象 AMapSearchAPI ,并继承搜索协议<AMapSearchDelegate>。
第 4 步,构造 AMapSearchAPI
构造主搜索对象 AMapSearchAPI,并设置代理。
self.search = [[AMapSearchAPI alloc] init];
self.search.delegate = self;search = AMapSearchAPI()
search.delegate = self第 5 步,设置公交线路查询参数
AMapBusLineNameSearchRequest *line = [[AMapBusLineNameSearchRequest alloc] init];
line.keywords           = key;
line.city               = @"beijing";
line.requireExtension   = YES;
let request = AMapBusLineNameSearchRequest()
request.keywords = keyword
request.city = "北京"
request.requireExtension = true第 6 步,发起公交线路查询
调用 AMapSearchAPI 的 AMapBusLineNameSearch 方法发起公交线路关键字查询。
[self.search AMapBusLineNameSearch:line];
search.aMapBusLineNameSearch(request)第 7 步,在回调中处理数据
当查询成功时,回进入 onBusLineSearchDone 回调函数,通过解析 AMapBusLineSearchResponse 对象获取公交线路的坐标,将公交线路取到显示在地图。
说明:
1)可以在回调中解析 response,获取公交线路信息。
2)通过 response.buslines 可以获取到 AMapBusLine 列表,公交线路详细信息可参考 AMapBusLine 类。
3)通过 AMapBusLine.busStops 可该线路上所有的公交站点。
/* 公交路线回调*/
- (void)onBusLineSearchDone:(AMapBusLineBaseSearchRequest *)request response:(AMapBusLineSearchResponse *)response
{
    if (response.buslines.count != 0)
    {
        //解析response获取公交线路信息,具体解析见 Demo
    }
}
func onBusLineSearchDone(_ request: AMapBusLineBaseSearchRequest!, response: AMapBusLineSearchResponse!) {
    
    if response.count == 0 {
        return
    }
    
   //解析response获取公交线路信息,具体解析见 Demo
}
说明
当检索失败时,会进入 didFailWithError 回调函数,通过该回调函数获取产生的失败的原因。
- (void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error
{
    NSLog(@"Error: %@", error);
}
func aMapSearchRequest(_ request: Any!, didFailWithError error: Error!) {
    print("Error:\(error)")
}
